函数与宏的区别
// 1. 函数调用需要较多的时间开销，而宏是就地展开，时间效率高
// 2. 函数定义只存在一份，而宏会在每个调用的地方存在一份拷贝，空间效率低
// 3. 宏参数本质是表达式，而函数参数是一个单一的数据，因此宏参数都必须用括号


// 别名
文件取别名:  ln file1 file2
类型取别名:  typedef int INT;
变量取别名:  int a; int &A = a;


// stack: 栈（堆栈）
// heap:  堆
// 数据段

// 1. 全局变量放在静态数据段中，既不在栈中也不在堆(heap)中
// 2. 局部变量要分情况，若被static修饰则放在静态数据段中，否则放在栈(stack)中
// 3. 函数内static定义的变量就是静态局部变量，存放在静态数据段中
// 4. 栈的总大小是有限的，用来存储临时数据，不适合用来存储大型变量（如结构体）或者存储链表节点；堆的总大小仅受物理内存限制，用来存储自定义生命周期数据，适用用来存储大型变量和海量节点数据，堆内存完全由用户来管理的，在使用完毕之后必须及时释放，否则会造成内存泄漏。